import {ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot} from '@angular/router';
import {AppAuthService} from '../server/app-auth.service';
import {Injectable} from '@angular/core';

//@Injectable自动注入  类似Java中的@bean
@Injectable({
  providedIn: 'root',
})
export class AuthGuard implements CanActivate {
  constructor(private authService: AppAuthService) {
    console.log('AuthGuard constructor');
  }

  async canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
    //ActivatedRouteSnapshot待激活的路由 包含特激活路由节点的信息。  不可变
    //RouterStateSnapshot整个路由树的不可变快照，包含了从根路由到当前路由的完整路径信息。  不可变

    //console.log("AuthGuard>>>", await this.authService.isLoggedIn())

    if (false === await this.authService.isLoggedIn()) {
      // 用户未登录，处理
      // 重定向到登录页面  并带上当前URL作为返回点
      // 注意：这里返回的是一个UrlTree对象

      //当前待激活路由路径state.url
      return this.authService.getRedirectToLoginUrlTree(state.url);
    }

    //都通过 允许访问 true
    return true;
  }

}

